aconfig: follow Java conventions for Java file paths

Update codegen_java to write the generated Java file(s) to
"java/package/File.java" instead of just "File.java".

Also generalize codegen_java::GeneratedFile to commands::OutputFile in
preparation for the upcoming C++ and Rust codegen.

Also change Java package name to 'com.android.internal.aconfig'.

Bug: 279485059
Test: atest aconfig.test
Change-Id: I13978697e35010fe6be8637aa495d4b852dbed7e
diff --git a/tools/aconfig/src/codegen_java.rs b/tools/aconfig/src/codegen_java.rs
index 08b762a..bbf1272 100644
--- a/tools/aconfig/src/codegen_java.rs
+++ b/tools/aconfig/src/codegen_java.rs
@@ -20,13 +20,9 @@
 
 use crate::aconfig::{FlagState, Permission};
 use crate::cache::{Cache, Item};
+use crate::commands::OutputFile;
 
-pub struct GeneratedFile {
-    pub file_content: String,
-    pub file_name: String,
-}
-
-pub fn generate_java_code(cache: &Cache) -> Result<GeneratedFile> {
+pub fn generate_java_code(cache: &Cache) -> Result<OutputFile> {
     let class_elements: Vec<ClassElement> = cache.iter().map(create_class_element).collect();
     let readwrite = class_elements.iter().any(|item| item.readwrite);
     let namespace = uppercase_first_letter(
@@ -35,8 +31,9 @@
     let context = Context { namespace: namespace.clone(), readwrite, class_elements };
     let mut template = TinyTemplate::new();
     template.add_template("java_code_gen", include_str!("../templates/java.template"))?;
-    let file_content = template.render("java_code_gen", &context)?;
-    Ok(GeneratedFile { file_content, file_name: format!("{}.java", namespace) })
+    let contents = template.render("java_code_gen", &context)?;
+    let path = ["com", "android", "internal", "aconfig", &(namespace + ".java")].iter().collect();
+    Ok(OutputFile { contents: contents.into(), path })
 }
 
 #[derive(Serialize)]
@@ -123,7 +120,7 @@
                 },
             )
             .unwrap();
-        let expect_content = "package com.android.aconfig;
+        let expect_content = r#"package com.android.internal.aconfig;
 
         import android.provider.DeviceConfig;
 
@@ -135,17 +132,19 @@
 
             public static boolean test2() {
                 return DeviceConfig.getBoolean(
-                    \"Testflag\",
-                    \"test2__test2\",
+                    "Testflag",
+                    "test2__test2",
                     false
                 );
             }
 
         }
-        ";
-        let expected_file_name = format!("{}.java", uppercase_first_letter(namespace));
-        let generated_file = generate_java_code(&cache).unwrap();
-        assert_eq!(expected_file_name, generated_file.file_name);
-        assert_eq!(expect_content.replace(' ', ""), generated_file.file_content.replace(' ', ""));
+        "#;
+        let file = generate_java_code(&cache).unwrap();
+        assert_eq!("com/android/internal/aconfig/Testflag.java", file.path.to_str().unwrap());
+        assert_eq!(
+            expect_content.replace(' ', ""),
+            String::from_utf8(file.contents).unwrap().replace(' ', "")
+        );
     }
 }