L-01Kの設定画面をタブ表示にしようとしたけどできなかった

概要

ドコモのL-01Kでは、auのLGV35とは違い設定のタブ表示ができなくなっている。

わざわざ機能自体をコード上から消すのも手間だろうから、おそらくタブ表示に切り替えるUIが塞がれているだけで、何かしらゴニョれば使えるのではないか?といろいろ試した。

f:id:otack:20180425000710p:plain:w240 f:id:otack:20180425000716p:plain:w240
LGV35 L-01K

調査

多分この表示形式は com.android.settings アプリの設定として保持されているだろうと推測。
Androidの端末設定は /system/users/0/settings_system.xml に保存されるので見てみる。

<setting id="342" name="support_settings_tabview" value="0" package="com.android.settings" defaultValue="1" defaultSysSet="true" />

あった。
早速ADBから設定を書き換える。

$ adb shell settings put system support_settings_tabview 1

しかし効果はなく、端末を再起動したりしても変わらず。
仕方ないので /system/priv-app/LGSettings/oat/arm64/LGSettings.vdex をPCでデコンパイル

vdexは以下のツールで展開できる。

github.com

その後、dex2jarとjd-guiを使えば概ね復元されたコードを読める。

public static boolean isSupportedTabView(Context paramContext)
{
  boolean bool1 = false;
  boolean bool2;
  if (LGUtils.TIERS.fromString(LGUtils.getTierType(paramContext)) == LGUtils.TIERS.TIER_LOW) {
    bool2 = bool1;
  }
  for (;;)
  {
    return bool2;
    bool2 = bool1;
    if (!Config.isCurrentOperator("DCM"))
    {
      bool2 = bool1;
      if (!Config.isCurrentOperator("TRF"))
      {
        bool2 = bool1;
        if (!FeatureUtils.isTablet()) {
          bool2 = true;
        }
      }
    }
  }
}

オペレーターを見てフラグを落としていた。
DCMはドコモのことである。(もう1つのTRFは何処だろう)

問題は Config.isCurrentOperator だが、内容は以下のようになっている。

public static boolean isCurrentOperator(String paramString)
{
  if (paramString != null) {}
  for (boolean bool = paramString.equalsIgnoreCase(sOperator);; bool = false) {
    return bool;
  }
}
sOperator = SystemProperties.get("ro.build.target_operator", "OPEN");

つまり、/system/build.propro.build.target_operator の値を参照している。
例によってADBから書き換えたいところだが、セキュリティなどの問題からこの値は変更不可となっている。

$ adb shell setprop ro.build.target_operator OPEN
setprop: failed to set property 'ro.build.target_operator' to 'OPEN'

やはりroot権限がないと難しい。

結論

弄れる部分がないか追ってみたが、結局できなかった。