Java tutorial
/* * Copyright 2014 Jeremie Long * * 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. */ package com.lithidsw.wallbox.app.wallsnap; import java.io.File; import java.util.ArrayList; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.GridView; import android.widget.RelativeLayout; import android.widget.TextView; import com.lithidsw.wallbox.R; import com.lithidsw.wallbox.app.wallsnap.adapters.WallpaperAdapter; import com.lithidsw.wallbox.utils.C; import com.lithidsw.wallbox.utils.CustomDialogs; public class WallpaperFragment extends Fragment { WallpaperAdapter wallAdapter; SharedPreferences prefs; private WallpaperLoader wallLoader; private FragmentActivity fa; GridView wallGrid; TextView mTextView; ArrayList<String[]> aWall = new ArrayList<String[]>(); private boolean simpleFirstRun = false; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { RelativeLayout rl = (RelativeLayout) inflater.inflate(R.layout.wallpaper_frag, container, false); if (rl != null) { fa = super.getActivity(); wallGrid = (GridView) rl.findViewById(R.id.grid_view); prefs = fa.getSharedPreferences(C.PREF, Context.MODE_PRIVATE); if (!prefs.getBoolean(C.PREF_WALLPAPER_CHECK_SAVE_SORT, false)) { prefs.edit().putInt(C.PREF_WALLPAPER_CURRENT_SORT, 0).commit(); } wallGrid = (GridView) rl.findViewById(R.id.grid_view); mTextView = (TextView) rl.findViewById(R.id.no_content); wallAdapter = new WallpaperAdapter(fa, aWall); wallGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(fa, WallSnapActivity.class); Bundle bundle = new Bundle(); bundle.putString(C.EXTRA_PATH, aWall.get(position)[0]); intent.putExtras(bundle); startActivity(intent); } }); wallGrid.setAdapter(wallAdapter); setHasOptionsMenu(true); if (!prefs.getBoolean(C.PREF_WALLPAPER_FIRST_RUN_MAIN, false)) { prefs.edit().putBoolean(C.PREF_WALLPAPER_FIRST_RUN_MAIN, true).commit(); String title = getResources().getString(R.string.main_title_wallpapers); String message = getResources().getString(R.string.wallpaper_description); new CustomDialogs().openFirstDialog(fa, title, message); } } return rl; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if (menu.size() > 0) { if (!simpleFirstRun) { if (!prefs.getBoolean(C.PREF_WALLPAPER_CHECK_SAVE_SORT, false)) { prefs.edit().putInt(C.PREF_WALLPAPER_CURRENT_SORT, 0); } if (!prefs.getBoolean(C.PREF_WALLPAPER_FIRST_RUN_MAIN, false)) { runReload(); prefs.edit().putBoolean(C.PREF_WALLPAPER_FIRST_RUN_MAIN, true).commit(); } else { runReload(); } simpleFirstRun = true; } } super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh: runReload(); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onResume() { super.onResume(); runReload(); } private void runReload() { stopWallLoader(); wallLoader = (WallpaperLoader) new WallpaperLoader().execute(); } @Override public void onPause() { super.onPause(); stopWallLoader(); } private void stopWallLoader() { if (wallLoader != null && wallLoader.getStatus() != WallpaperLoader.Status.FINISHED) { wallLoader.cancel(true); wallLoader = null; } } class WallpaperLoader extends AsyncTask<String, String, ArrayList<String[]>> { @Override protected void onPreExecute() { fa.setProgressBarIndeterminateVisibility(true); aWall.clear(); wallGrid.invalidateViews(); } @Override protected ArrayList<String[]> doInBackground(String... arg) { File storageDir = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "WallSnap"); ArrayList<String[]> list = new ArrayList<String[]>(); if (storageDir.exists()) { for (File file : storageDir.listFiles()) { if (!file.isDirectory()) { String[] f = new String[2]; f[0] = file.getAbsolutePath(); f[1] = file.getName(); list.add(f); } } } return list; } @Override protected void onPostExecute(ArrayList<String[]> list) { fa.setProgressBarIndeterminateVisibility(false); aWall.addAll(list); wallAdapter.notifyDataSetChanged(); if (list.size() > 0) { wallGrid.setVisibility(View.VISIBLE); mTextView.setVisibility(View.GONE); } else { wallGrid.setVisibility(View.GONE); mTextView.setVisibility(View.VISIBLE); } } } }