/*
* Copyright (C) 2011-2014 asksven
*
* 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
*et
* 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.asksven.betterbatterystats;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.asksven.betterbatterystats.R;
import com.asksven.betterbatterystats.adapters.StatsAdapter;
public class PackageFragmentActivity extends BaseActivity
{
static final String TAG = "PackageFragmentActivity";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
FragmentManager fm = getSupportFragmentManager();
// Create the list fragment and add it as our sole content.
if (fm.findFragmentById(R.layout.packageinfo) == null)
{
PackageFragment frag = new PackageFragment();
fm.beginTransaction().add(R.layout.packageinfo, frag).commit();
}
}
public static class PackageFragment extends Fragment
{
String m_packageName;
/**
* When creating, retrieve this instance's number from its arguments.
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle b = getActivity().getIntent().getExtras();
m_packageName = b.getString("package");
}
/**
* The Fragment's UI is just a simple text view showing its instance
* number.
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.packageinfo, container, false);
Bundle b = getActivity().getIntent().getExtras();
m_packageName = b.getString("package");
ImageView iconView = (ImageView) v.findViewById(R.id.icon);
Drawable icon;
PackageManager manager = getActivity().getPackageManager();
try
{
icon = manager.getApplicationIcon(m_packageName);
ViewCompat.setTransitionName(iconView, StatsAdapter.TRANSITION_NAME);
iconView.setImageDrawable(icon);
}
catch (Exception e)
{
// nop: no icon found
icon = null;
}
TextView pName = (TextView) v.findViewById(R.id.TextViewPName);
pName.setText(m_packageName);
TextView pOnly4_3 = (TextView) v.findViewById(R.id.TextViewOnly43);
final Button buttonSettings = (Button) v.findViewById(R.id.buttonSettings);
buttonSettings.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
showInstalledAppDetails(getActivity(), PackageFragment.this.m_packageName);
}
});
final Button buttonAppOps = (Button) v.findViewById(R.id.ButtonAppOps);
if (Build.VERSION.SDK_INT >= 18)
{
pOnly4_3.setVisibility(View.GONE);
buttonAppOps.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
showAppOps(getActivity(), PackageFragment.this.m_packageName);
}
});
} else
{
// disable as app ops is not available
buttonAppOps.setEnabled(false);
}
return v;
}
}
private static final String SCHEME = "package";
private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";
private static final String APP_PKG_NAME_22 = "pkg";
private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";
private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";
public static void showInstalledAppDetails(Context context, String packageName)
{
Intent intent = new Intent();
final int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel >= 9)
{
// above 2.3
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts(SCHEME, packageName, null);
intent.setData(uri);
} else
{
// below 2.3
final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22 : APP_PKG_NAME_21);
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName(APP_DETAILS_PACKAGE_NAME, APP_DETAILS_CLASS_NAME);
intent.putExtra(appPkgName, packageName);
}
context.startActivity(intent);
}
public static void showAppOps(Context context, String packageName)
{
Intent intent = null;
// JB
if (Build.VERSION.SDK_INT == 18)
{
intent = new Intent("android.settings.APP_OPS_SETTINGS");
Uri uri = Uri.fromParts(SCHEME, packageName, null);
} else if (Build.VERSION.SDK_INT >= 19)
{
// @see http://brightechno.com/blog/archives/211
intent = new Intent();
intent.setClassName("com.android.settings",
"com.android.settings.Settings");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra(":android:show_fragment",
"com.android.settings.applications.AppOpsSummary");
}
if (intent != null)
{
try
{
context.startActivity(intent);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(context, context.getString(R.string.message_no_appops), Toast.LENGTH_SHORT).show();
}
}
}
}