Java tutorial
package com.jbirdvegas.mgerrit; /* * Copyright (C) 2013 Android Open Kang Project (AOKP) * Author: Evan Conway (P4R4N01D), 2013 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.ViewSwitcher; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; import com.jbirdvegas.mgerrit.adapters.GooFileArrayAdapter; import com.jbirdvegas.mgerrit.helpers.AnalyticsHelper; import com.jbirdvegas.mgerrit.objects.GooFileObject; import org.json.JSONArray; import org.json.JSONObject; import java.util.LinkedList; import java.util.List; public class ChangelogFragment extends Fragment { private static final String TAG = "ChangelogFragment"; private FragmentActivity mParent; private RequestQueue mRequestQueue; private String mQuery; Spinner mUpdatesList; private GooFileArrayAdapter gooAdapter; private ImageView mSaveBtn; private ViewSwitcher mViewSwitcher; public ChangelogFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.changelog_card, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mParent = this.getActivity(); mRequestQueue = Volley.newRequestQueue(mParent); mViewSwitcher = (ViewSwitcher) mParent.findViewById(R.id.vs_changelog_card); if (mViewSwitcher.getDisplayedChild() != 0) mViewSwitcher.showPrevious(); mUpdatesList = (Spinner) mParent.findViewById(R.id.changelog); mSaveBtn = (ImageView) mParent.findViewById(R.id.goo_download_zip_button); mSaveBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onSaveClicked(); } }); mUpdatesList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { GooFileObject buildObject = (GooFileObject) parent.getItemAtPosition(position); GooFileObject previousBuild = null; if (position + 1 < parent.getCount()) { previousBuild = (GooFileObject) parent.getItemAtPosition(position + 1); } ((ChangelogActivity) mParent).onBuildSelected(previousBuild, buildObject); } @Override public void onNothingSelected(AdapterView<?> parent) { // Not used } }); findDates(); } private void findDates() { // use Volley to get our packages list Log.d(TAG, "Calling: " + mQuery); mRequestQueue.add(new JsonObjectRequest(Request.Method.GET, mQuery, null, new gooImResponseListener(), new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.e(TAG, "Failed to get recent upload dates from goo.im!", volleyError); mParent.setProgressBarIndeterminateVisibility(false); } })); mRequestQueue.start(); } private void setupList(List<GooFileObject> gooFilesList) { gooAdapter = new GooFileArrayAdapter(mParent, R.layout.goo_files_list_item, gooFilesList); mUpdatesList.setAdapter(gooAdapter); } public void setQuery(String query) { mQuery = query; } class gooImResponseListener implements Response.Listener<JSONObject> { @Override public void onResponse(JSONObject response) { JSONArray result = response.optJSONArray("list"); if (result == null) { TextView text = (TextView) mParent.findViewById(R.id.changelog_searching); text.setText(mParent.getString(R.string.no_changelog)); mParent.findViewById(R.id.changelog_progressBar).setVisibility(View.GONE); return; } mViewSwitcher.showNext(); Toast.makeText(mParent, R.string.please_select_update_for_range, Toast.LENGTH_LONG).show(); int resultsSize = result.length(); List<GooFileObject> filesList = new LinkedList<>(); try { for (int i = 0; resultsSize > i; i++) { filesList.add(GooFileObject.getInstance(result.getJSONObject(i))); } } catch (Exception e) { Log.e("ErrorListener", e.getLocalizedMessage()); } setupList(filesList); } } public void onSaveClicked() { GooFileObject build = (GooFileObject) mUpdatesList.getSelectedItem(); if (build != null) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(formUrl(build))); startActivity(intent); } else { // Failed to parse GooFileObject logFailure(null); } } protected String formUrl(GooFileObject build) { return build.getShortUrl() != null ? build.getShortUrl() : "http://goo.im/" + build.getPath(); } private void logFailure(GooFileObject file) { AnalyticsHelper.sendAnalyticsEvent(getActivity(), AnalyticsHelper.GA_LOG_FAIL, AnalyticsHelper.ACTION_CHANGELOG_SAVE_FAIL, file == null ? AnalyticsHelper.EVENT_CHANGELOG_FILE_NULL : AnalyticsHelper.EVENT_CHANGELOG_SHORT_URL_NULL, null); } }