【無料】Apple / Google パスワードマネージャーを起動できる ショートカットApp 🔐【iPhone/Mac】

あれこれ試行錯誤してみましたが、

「マルチプラットフォームの有料アプリでー」とか

「import や export 機能でー」とかいうても、

結局は、OSやブラウザに認証の機能が依存してる限り、

手動でのアカウントやパスワードの管理は、

そのベンダーの提供しているUIを使った方が便利です。

Mac ベースで生活している私としましては、

そんなショートカットAppが欲しいので、

とりあえず作っておきました。

当然、iPhone でも iCloud共有しながら使えます。


👉 Password Managers hatena-bookmark

使い方のイメージは、このショートカットを起動後、

Chrome でのWEBサービス自動ログインができない時
→ 「Apple」を選択して、アカウントID/パスワードを確認(コピー)する。

Safari でのWEBサービスログインができない時
→ 「Google」を選択して、アカウントID/パスワードを確認する。

iPhone/Mac アプリのログインができない時
→ 「Google」を選択して、アカウントID/パスワードを確認する。

Android アプリのログインができない時
→ 「Apple」を選択して、アカウントID/パスワードを確認する。

という感じです。

基本的に、

「アカウントID/パスワードの登録は利用しているそのUIに任せる。」

のが簡単で安心で、

自動入力時にも混乱しなくて良いと思います。

iCloud と Google の重複はお互いのバックアップにもなります。

👉 【便利】Mac パスワードマネージャー を メニューバーのショートカット や コマンドラインから開く方法 hatena-bookmark


ChatGPTアプリで表を出力させる - Markdown Text for Android JetpackCompose

ChatGPT は Markdown 出力することができますよね。

それを Jetpack Compose で表示させましょう。

ChatGPTアプリで表を出力させる - Markdown Text for Android JetpackCompose

すごく分かりやすいですね。



以下のライブラリを使いました。

👉 jeziellago/compose-markdown: Markdown Text for Android Jetpack Compose 📋. hatena-bookmark

利用記述はシンプルに作成されています。


@Composable  
fun ComplexExampleContent() {  
  MarkdownText(
    modifier = Modifier.padding(8.dp),
    markdown = markdown,
    textAlign = TextAlign.Center,
    fontSize = 12.sp,
    color = LocalContentColor.current,
    maxLines = 3,
    fontResource = R.font.montserrat_medium,
    style = MaterialTheme.typography.overline,
  )  
}

続いて、Markdown で Mermaid や Planet UML で図を出力もできそうです。

ちなみに、このライブラリは、さらに以下のライブラリたちに順に依存しています。

👉 Markwon/app-sample at master · noties/Markwon hatena-bookmark
👉 CommonMark hatena-bookmark



Android JetpackCompose での OptionMenu - Alternative for OptionMenu in JetpackCompose

Android JetpackCompose で TopAppBar に入れるべく「メニューボタン」をどうするか。

こんな感じになりました。

今現在は、この Box + DropDownMenu でいこうかと思っています。

以下記事から。

A DropdownMenu behaves similarly to a Popup, and will use the position of the parent layout to position itself on screen. Commonly a DropdownMenu will be placed in a Box with a sibling that will be used as the 'anchor'.

DropdownMenu は Popup と同様の動作をし、親レイアウトの位置を利用して画面上に配置されます。DropdownMenu
は「アンカー」として使用される兄弟を持つ Box に配置されます。

👉 android - Jetpack compose popup menu - Stack Overflow hatena-bookmark


@Composable
fun MenuButton() {

  val context = LocalContext.current
  var expanded by remember { mutableStateOf(false) }

  Box {

    IconButton(onClick = { expanded = true }) {
      Icon(Icons.Filled.MoreVert, null)
    }

    DropdownMenu(
      expanded = expanded,
      onDismissRequest = { expanded = false },
    ) {
      DropdownMenuItem(
        onClick = {
          expanded = false
          context.startActivity(
            Intent(Intent.ACTION_VIEW, Uri.parse("https://platform.openai.com/account/usage"))
          )
        }
      ) {
        Text(text = "Usage")
      }
      Divider()
      DropdownMenuItem(onClick = {
        expanded = false
        context.startActivity(
          Intent(Intent.ACTION_VIEW, Uri.parse("https://platform.openai.com/docs/api-reference"))
        )
      }) {
        Text(text = "API reference")
      }
    }

  }

}

こんなところでしょうか。

TopAppBar にセットするなら、以下のように action へ。


TopAppBar(
  title = { Text("Simple TopAppBar") },
  navigationIcon = {
    IconButton(onClick = { /* doSomething() */ }) {
      Icon(Icons.Filled.Menu, contentDescription = null)
    }
  },
  actions = {
    MenuButton()
  }
)

汎用性を上げるなら引数を考慮して、labelaction のペアのリストを渡してループ、などするとよいです。

👉 DropdownMenu | androidx.compose.material  |  Android Developers hatena-bookmark