package com.zacharee1.systemuituner.fragments; import android.app.Dialog; import android.support.v4.app.Fragment; import android.app.TimePickerDialog; import android.content.Intent; import android.os.Bundle; import android.os.Looper; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.NumberPicker; import android.widget.Spinner; import android.widget.Switch; import android.widget.TimePicker; import com.zacharee1.systemuituner.MainActivity; import com.zacharee1.systemuituner.R; import java.util.Calendar; /** * Created by Zacha on 4/5/2017. */ @SuppressWarnings("ALL") public class Demo extends Fragment { private MainActivity activity; private int hour = 12; private int minute = 00; private int mobileLevel = 3; private int wifiLevel = 3; private int batteryLevel = 50; private final String showMobile = "show"; private final String showWiFi = "show"; private String showAirplane = "hide"; private String mobileType = "lte"; private String batteryPlugged = "false"; private String showNotifs = "false"; private String statBarStyle = "opaque"; private Demo demo; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (getActivity() instanceof MainActivity) { activity = (MainActivity) getActivity(); } View view = inflater.inflate(R.layout.fragment_demo, container, false); demo = new Demo(); //spinners Spinner wifi = view.findViewById(R.id.wifi_strength); Spinner mobile = view.findViewById(R.id.mobile_strength); Spinner mobileTypeSpinner = view.findViewById(R.id.mobile_type); Spinner statStyleSpinner = view.findViewById(R.id.stat_bar_style); //switches Switch showDemo = view.findViewById(R.id.show_demo); Switch batteryPluggedSwitch = view.findViewById(R.id.battery_plugged); Switch airplaneMode = view.findViewById(R.id.show_airplane); Switch showNotifSwitch = view.findViewById(R.id.show_notifs); //buttons Button selectTime = view.findViewById(R.id.select_time); Button enableDemo = view.findViewById(R.id.enable_demo); Button selectBatteryLevel = view.findViewById(R.id.select_battery_level_button); //set spinner adapters setSpinnerAdapters(wifi, R.array.wifi_strength); setSpinnerAdapters(mobile, R.array.mobile_strength); setSpinnerAdapters(mobileTypeSpinner, R.array.mobile_type); setSpinnerAdapters(statStyleSpinner, R.array.stat_bar_style); //set spinner selections from sharedPrefs wifi.setSelection(activity.setThings.sharedPreferences.getInt("wifiLevel", 3)); mobile.setSelection(activity.setThings.sharedPreferences.getInt("mobileLevel", 3)); mobileTypeSpinner.setSelection(activity.setThings.sharedPreferences.getInt("mobileType1", 0)); statStyleSpinner.setSelection(activity.setThings.sharedPreferences.getInt("statBarStyle1", 0)); //set proper values from sharedPrefs statBarStyle = statStyleSpinner.getItemAtPosition(activity.setThings.sharedPreferences.getInt("statBarStyle1", 0)).toString(); showDemo.setChecked(activity.setThings.sharedPreferences.getBoolean("demoOn", false)); batteryPluggedSwitch.setChecked(activity.setThings.sharedPreferences.getBoolean("isCharging", false)); if (activity.setThings.sharedPreferences.getBoolean("isCharging", false)) { batteryPlugged = "true"; } airplaneMode.setChecked(activity.setThings.sharedPreferences.getBoolean("showAirplane", false)); if (activity.setThings.sharedPreferences.getBoolean("showAirplane", false)) { showAirplane = "show"; } showNotifSwitch.setChecked(activity.setThings.sharedPreferences.getBoolean("showNotifs", false)); if (activity.setThings.sharedPreferences.getBoolean("showNotifs", false)) { showNotifs = "true"; } mobileType = mobileTypeSpinner.getItemAtPosition(activity.setThings.sharedPreferences.getInt("mobileType1", 0)).toString(); hour = activity.setThings.sharedPreferences.getInt("hour", 12); minute = activity.setThings.sharedPreferences.getInt("minute", 00); mobileLevel = activity.setThings.sharedPreferences.getInt("mobileLevel", 3); wifiLevel = activity.setThings.sharedPreferences.getInt("wifiLevel", 3); batteryLevel = activity.setThings.sharedPreferences.getInt("batteryLevel", 50); //button and switch listeners /* TODO: clean up listeners */ activity.setThings.buttons(enableDemo, "enableDemo"); showDemo(showDemo); selectTime(selectTime); selectSignal(R.id.wifi_strength, wifi); selectSignal(R.id.mobile_strength, mobile); selectBatteryLevel(selectBatteryLevel); selectMobileType(mobileTypeSpinner); setBatteryPlugged(batteryPluggedSwitch); setShowNotifs(showNotifSwitch); setStatBarStyle(statStyleSpinner); setAirplaneMode(airplaneMode); return view; } private void setSpinnerAdapters(Spinner spinner, int arrayID) { ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(activity.getApplicationContext(), arrayID, activity.setThings.Dark ? R.layout.spinner_items_dark : R.layout.spinner_items_light); //set correct spinner text color adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } private void setStatBarStyle(final Spinner spinner) { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { activity.setThings.editor.putInt("statBarStyle1", position); activity.setThings.editor.apply(); statBarStyle = String.valueOf(spinner.getItemAtPosition(position)); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } private void setShowNotifs(Switch toggle) { toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { activity.setThings.editor.putBoolean("showNotifs", true); showNotifs = "true"; } else { activity.setThings.editor.putBoolean("showNotifs", false); showNotifs = "false"; } activity.setThings.editor.apply(); } }); } private void setBatteryPlugged(Switch toggle) { toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { activity.setThings.editor.putBoolean("isCharging", true); batteryPlugged = "true"; } else { activity.setThings.editor.putBoolean("isCharging", false); batteryPlugged = "false"; } activity.setThings.editor.apply(); } }); } private void setAirplaneMode(Switch toggle) { toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { activity.setThings.editor.putBoolean("showAirplane", true); showAirplane = "show"; } else { activity.setThings.editor.putBoolean("showAirplane", false); showAirplane = "hide"; } activity.setThings.editor.apply(); } }); } private void selectMobileType(final Spinner spinner) { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String value = String.valueOf(spinner.getItemAtPosition(position)); activity.setThings.editor.putInt("mobileType1", position); activity.setThings.editor.apply(); mobileType = value; } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } private void selectBatteryLevel(final Button button) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Dialog d = new Dialog(button.getContext()); d.setTitle("NumberPicker"); d.setContentView(R.layout.battery_level_dialog); Button b1 = d.findViewById(R.id.button_cancel); Button b2 = d.findViewById(R.id.button_set); final NumberPicker np = d.findViewById(R.id.select_battery_level); np.setMaxValue(100); np.setMinValue(0); np.setValue(activity.setThings.sharedPreferences.getInt("batteryLevel", 50)); np.setWrapSelectorWheel(false); np.setSelected(false); np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { } }); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // tv.setText(String.valueOf(np.getValue())); d.dismiss(); } }); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { activity.setThings.editor.putInt("batteryLevel", np.getValue()); activity.setThings.editor.apply(); batteryLevel = np.getValue(); d.dismiss(); } }); d.show(); } }); } private void selectTime(final Button button) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar mcurrentTime = Calendar.getInstance(); int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); int minute = mcurrentTime.get(Calendar.MINUTE); TimePickerDialog timePickerDialog; timePickerDialog = new TimePickerDialog(button.getContext(), new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { demo.hour = hourOfDay; activity.setThings.editor.putInt("hour", hourOfDay); demo.minute = minute; activity.setThings.editor.putInt("minute", minute); activity.setThings.editor.apply(); } }, hour, minute, true); timePickerDialog.setTitle(getResources().getText(R.string.select_time_title)); timePickerDialog.show(); } }); } private void selectSignal(final int signalID, final Spinner spinner) { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { switch (signalID) { case R.id.wifi_strength: wifiLevel = Integer.decode(String.valueOf(spinner.getItemAtPosition(position))); activity.setThings.editor.putInt("wifiLevel", wifiLevel); break; case R.id.mobile_strength: mobileLevel = Integer.decode(String.valueOf(spinner.getItemAtPosition(position))); activity.setThings.editor.putInt("mobileLevel", mobileLevel); } activity.setThings.editor.apply(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } private void showDemo(final Switch toggle) { toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { new Thread(new Runnable() { @Override public void run() { Looper.prepare(); try { //create new Intent and add relevant data to show Demo Mode with specified options Intent intent = new Intent("com.android.systemui.demo"); intent.putExtra("command", "enter"); getActivity().sendBroadcast(intent); intent.putExtra("command", "clock"); intent.putExtra("hhmm", String.valueOf(demo.hour) + String.valueOf(demo.minute)); getActivity().sendBroadcast(intent); intent.putExtra("command", "network"); intent.putExtra("mobile", String.valueOf(showMobile)); intent.putExtra("fully", "true"); intent.putExtra("level", String.valueOf(mobileLevel)); intent.putExtra("datatype", String.valueOf(mobileType)); getActivity().sendBroadcast(intent); intent.removeExtra("mobile"); intent.removeExtra("datatype"); intent.putExtra("wifi", String.valueOf(showWiFi)); intent.putExtra("fully", "true"); intent.putExtra("level", String.valueOf(wifiLevel)); getActivity().sendBroadcast(intent); intent.putExtra("airplane", String.valueOf(showAirplane)); getActivity().sendBroadcast(intent); intent.putExtra("command", "battery"); intent.putExtra("level", String.valueOf(batteryLevel)); intent.putExtra("plugged", String.valueOf(batteryPlugged)); getActivity().sendBroadcast(intent); intent.putExtra("command", "notifications"); intent.putExtra("visible", showNotifs); getActivity().sendBroadcast(intent); intent.putExtra("command", "bars"); intent.putExtra("mode", statBarStyle); getActivity().sendBroadcast(intent); activity.setThings.editor.putBoolean("demoOn", true); activity.setThings.editor.apply(); } catch (Exception e) { Log.e("Demo", e.getMessage()); } } }).start(); } else { new Thread(new Runnable() { @Override public void run() { //turn Demo Mode off Intent intent = new Intent("com.android.systemui.demo"); intent.putExtra("command", "exit"); getActivity().sendBroadcast(intent); activity.setThings.editor.putBoolean("demoOn", false); activity.setThings.editor.apply(); } }).start(); } } }); } }