package com.aero.control.helpers;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.provider.Settings;
import com.aero.control.R;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
* Created by Alexander Christ on 25.05.15.
*
* Utility methods
*/
public class Util {
/**
* Returns a random CharSeqeuence
* @param context Context, the current Context
* @return CharSeqeuence
*/
public static CharSequence getRandomLoadingText(Context context) {
ArrayList<Integer> randomData = new ArrayList<Integer>();
randomData.add(R.string.random_programming_flux);
randomData.add(R.string.random_nsa_loading);
randomData.add(R.string.random_data_somewhere);
randomData.add(R.string.random_shovelling_coal);
randomData.add(R.string.random_testing_patience);
randomData.add(R.string.random_prepare_awesomeness);
randomData.add(R.string.random_working_you_know);
return context.getText(randomData.get(new Random().nextInt(randomData.size())));
}
/**
* Shows different output depending on the passed value.
* @param milliseconds long, Time in milliseconds.
* @return String
*/
public static String getFormatedTimeString(long milliseconds) {
if (milliseconds < 60000) {
return String.format("%02d secs",
TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
} else if (milliseconds < 3600000) {
return String.format("%02d min %02d secs",
TimeUnit.MILLISECONDS.toMinutes(milliseconds) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),
TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
} else {
return String.format("%02d h %02d min %02d secs",
TimeUnit.MILLISECONDS.toHours(milliseconds),
TimeUnit.MILLISECONDS.toMinutes(milliseconds) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),
TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
}
}
/**
* Returns the last file from a given path.
* @param syspath The system path (e.g. /sys/path/to/file)
* @return String (for example "file")
*/
public static String getLastSysValue(String syspath) {
if (syspath == null)
return null;
String[] values = syspath.split("/");
return values[values.length - 1];
}
/**
* Returns the current usage stats list, if the user enable the option in the settings menu.
* @param context Context, the current context
* @return List<UsageStats>
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static List<UsageStats> getUsageStatsList(Context context){
UsageStatsManager usm = getUsageStatsManager(context);
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.YEAR, -1);
long startTime = calendar.getTimeInMillis();
List<UsageStats> usageStatsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);
return usageStatsList;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static UsageStatsManager getUsageStatsManager(Context context){
UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
return usm;
}
/**
* Show the usage stats warning dialog, to inform the user.
* @param context Context, the current application context
*/
public static void showUsageStatDialog(final Context context) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
if (Util.getUsageStatsList(context).isEmpty()) {
AlertDialog dialog = new AlertDialog.Builder(context)
.setTitle(R.string.warning)
.setIcon(R.drawable.warning)
.setMessage(R.string.pref_lollipop_usage_warning)
.setCancelable(false)
.setPositiveButton(R.string.aero_continue, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
context.startActivity(intent);
}
})
.create();
dialog.show();
}
}
}
}