package jp.co.cyberagent.stf.query; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import com.google.protobuf.GeneratedMessageLite; import com.google.protobuf.InvalidProtocolBufferException; import java.util.ArrayList; import java.util.List; import jp.co.cyberagent.stf.proto.Wire; import jp.co.cyberagent.stf.util.BrowserUtil; import jp.co.cyberagent.stf.util.GraphicUtil; public class GetBrowsersResponder extends AbstractResponder { public GetBrowsersResponder(Context context) { super(context); } @Override public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException { Wire.GetBrowsersRequest request = Wire.GetBrowsersRequest.parseFrom(envelope.getMessage()); PackageManager pm = context.getPackageManager(); List<ResolveInfo> allBrowsers = BrowserUtil.getBrowsers(context); ResolveInfo defaultBrowser = BrowserUtil.getDefaultBrowser(context); ArrayList<Wire.BrowserApp> apps = new ArrayList<Wire.BrowserApp>(); for (ResolveInfo info : allBrowsers) { ApplicationInfo appInfo = info.activityInfo.applicationInfo; apps.add(Wire.BrowserApp.newBuilder() .setName(pm.getApplicationLabel(appInfo).toString()) .setComponent(BrowserUtil.getComponent(info)) .setSelected(BrowserUtil.isSameBrowser(info, defaultBrowser)) .setSystem((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0 || (appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) .build()); } return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.GET_BROWSERS) .setMessage(Wire.GetBrowsersResponse.newBuilder() .setSuccess(true) .setSelected(defaultBrowser != null) .addAllApps(apps) .build() .toByteString()) .build(); } @Override public void cleanup() { // No-op } }