com.lithidsw.wallbox.app.saturate.SaturateFrag.java Source code

Java tutorial

Introduction

Here is the source code for com.lithidsw.wallbox.app.saturate.SaturateFrag.java

Source

/*
 * 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.saturate;

import java.io.File;
import java.util.Calendar;

import android.app.ProgressDialog;
import android.app.WallpaperInfo;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
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.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;

import com.lithidsw.wallbox.R;
import com.lithidsw.wallbox.utils.C;
import com.lithidsw.wallbox.utils.CustomDialogs;
import com.lithidsw.wallbox.utils.Utils;

public class SaturateFrag extends Fragment {

    SharedPreferences prefs;
    private Utils mUtils;
    private WallpaperManager wm;
    private ImageView image;
    private float seekerFl;
    SeekBar seek;

    Menu mMenu;

    TextView time_text;
    int hour;

    boolean isRunning = true;

    LinearLayout ll;
    FragmentActivity fa;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        fa = super.getActivity();
        ll = (LinearLayout) inflater.inflate(R.layout.saturate_frag, container, false);
        prefs = fa.getSharedPreferences(C.PREF, Context.MODE_PRIVATE);
        mUtils = new Utils(fa);
        wm = WallpaperManager.getInstance(fa);
        image = (ImageView) ll.findViewById(R.id.main_image);
        try {
            WallpaperInfo info = wm.getWallpaperInfo();
            info.toString();
            mUtils.sendToast(getResources().getString(R.string.live_wallpaper));
        } catch (NullPointerException ignore) {
        }
        time_text = (TextView) ll.findViewById(R.id.time_text);
        seek = (SeekBar) ll.findViewById(R.id.seeker);
        seek.setMax(23);
        Calendar cal = Calendar.getInstance();
        hour = cal.get(Calendar.HOUR_OF_DAY);
        time_text.setText(mUtils.getHour(hour));
        seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar v, int num, boolean isU) {
                if (!isRunning) {
                    time_text.setText(mUtils.getHour(num));
                    seekerFl = mUtils.getFloat(num);
                    Drawable d = mUtils.convertToGrayscale(wm.getDrawable(), seekerFl);
                    image.setImageDrawable(d);
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onStopTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub
            }
        });

        if (!prefs.getBoolean(C.PREF_SATURATE_FIRST_RUN_MAIN, false)) {
            prefs.edit().putBoolean(C.PREF_SATURATE_FIRST_RUN_MAIN, true).commit();
            String title = getResources().getString(R.string.main_title_saturate);
            String message = getResources().getString(R.string.saturate_description);
            new CustomDialogs().openFirstDialog(fa, title, message);
        }
        setHasOptionsMenu(true);
        return ll;
    }

    private void updateViews() {
        Log.e("", "Size: " + mMenu.size());
        isRunning = prefs.getBoolean(C.PREF_SATURATE_START, false);
        seek.setEnabled(!isRunning);
        if (isRunning) {
            final File file = new File(fa.getFilesDir(), C.CACHEIMG);

            Thread thread = new Thread() {
                @Override
                public void run() {
                    final Bitmap myBitmap = BitmapFactory.decodeFile(file.toString());
                    fa.runOnUiThread(new Runnable() {
                        public void run() {
                            image.setImageBitmap(mUtils.toGrayscale(myBitmap, mUtils.h2F()));
                            seek.setProgress(hour);
                            if (mMenu.size() > 1) {
                                mMenu.getItem(0).setVisible(false);
                                mMenu.getItem(1).setVisible(true);
                            }
                        }
                    });
                }
            };

            thread.start();
        } else {
            seek.setProgress(hour);
            if (mMenu.size() > 1) {
                mMenu.getItem(0).setVisible(true);
                mMenu.getItem(1).setVisible(false);
            }
        }
    }

    private void setWallpaper() {
        if (isRunning) {
            stopRunning();
            updateViews();
        } else {
            startRunning();
        }
    }

    private void startRunning() {
        new WallpaperLoader().execute();
    }

    private void stopRunning() {
        mUtils.stopSaturatedAlarms();
        mUtils.sendToast(SaturateFrag.this.getResources().getString(R.string.stopped_sat));
        prefs.edit().putBoolean(C.PREF_SATURATE_START, false).commit();
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        mMenu = menu;
        updateViews();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_apply:
            setWallpaper();
            return true;
        case R.id.action_stop:
            setWallpaper();
            return true;
        default:
            return false;
        }
    }

    class WallpaperLoader extends AsyncTask<String, String, String> {

        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            progressDialog = ProgressDialog.show(fa, "", fa.getResources().getString(R.string.set_wallpaper));
        }

        @Override
        protected String doInBackground(String... strings) {
            mUtils.setSaturatedWallpaper();
            return null;
        }

        @Override
        protected void onPostExecute(String count) {
            progressDialog.dismiss();
            mUtils.stopSaturatedAlarms();
            mUtils.setSaturatedAlarms();
            prefs.edit().putBoolean(C.PREF_SATURATE_START, true).commit();
            mUtils.sendToast(fa.getResources().getString(R.string.started_sat));
            updateViews();
        }
    }

}