package at.wada811.android.library.demos;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.widget.ExpandableListView;
import at.wada811.android.library.demos.ActivityListFragment.ExpandableListListener;
import at.wada811.android.library.demos.ActivityListFragment.ExpandableListListenerProvider;
import at.wada811.android.library.demos.broadcastreceiver.DateTimeChangeReceiver;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.TreeSet;
public class MainActivity extends FragmentActivity implements ExpandableListListenerProvider {
private ActivityListAdapter mActivityListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupSampleList();
DateTimeChangeReceiver.registerDateChangeReceiver(this);
}
private void setupSampleList(){
// サンプルActivityのリストを取得
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage(getPackageName());
PackageManager packageManager = getPackageManager();
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
// resolveInfos から activityInfos を取得
List<ActivityInfo> activityInfos = new ArrayList<ActivityInfo>();
for(ResolveInfo resolveInfo : resolveInfos){
activityInfos.add(resolveInfo.activityInfo);
}
// パッケージ名でソート
Collections.sort(activityInfos, new Comparator<ActivityInfo>(){
@Override
public int compare(ActivityInfo lhs, ActivityInfo rhs){
return lhs.name.compareTo(rhs.name);
}
});
// packages の生成
TreeSet<String> packages = new TreeSet<String>();
// activities の生成
HashMap<String, ArrayList<ActivityInfo>> activities = new HashMap<String, ArrayList<ActivityInfo>>();
for(ActivityInfo activityInfo : activityInfos){
String[] splitsPackageName = activityInfo.name.split("\\.");
String packageName = splitsPackageName[splitsPackageName.length - 2];
packages.add(packageName);
ArrayList<ActivityInfo> activityList = activities.get(packageName);
if(activityList == null){
activityList = new ArrayList<ActivityInfo>();
}
activityList.add(activityInfo);
activities.put(packageName, activityList);
}
mActivityListAdapter = new ActivityListAdapter(this, new ArrayList<String>(packages), activities);
// ListFragmentを初期化
FragmentManager fragmentManager = getSupportFragmentManager();
ActivityListFragment activityListFragment = ActivityListFragment.newInstance("Activity Not Found!");
fragmentManager.beginTransaction().replace(R.id.fragment, activityListFragment).commit();
activityListFragment.setListAdapter(mActivityListAdapter);
}
@Override
public ExpandableListListener getExpandableListListener(){
return new ExpandableListListener(){
@Override
public void onGroupExpand(int groupPosition){
}
@Override
public void onGroupCollapse(int groupPosition){
}
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id){
return false;
}
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id){
ActivityInfo activityInfo = mActivityListAdapter.getChild(groupPosition, childPosition);
Intent intent = new Intent();
intent.setClassName(activityInfo.packageName, activityInfo.name);
startActivity(intent);
return false;
}
};
}
}