{"record":{"id":"78e2071a4483a3d6","repo":"microg/GmsCore","slug":"oncreateview-not-allowed-on-streetviewpanoramaview","errorCode":null,"errorMessage":"onCreateView not allowed on StreetViewPanoramaViewDelegate","messagePattern":"onCreateView not allowed on StreetViewPanoramaViewDelegate","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"play-services-maps/src/main/java/org/microg/gms/maps/StreetViewPanoramaViewDelegate.java","lineNumber":34,"sourceCode":"import com.google.android.gms.dynamic.ObjectWrapper;\nimport com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback;\nimport com.google.android.gms.maps.StreetViewPanorama;\nimport com.google.android.gms.maps.internal.*;\nimport com.google.android.gms.maps.model.RuntimeRemoteException;\n\npublic class StreetViewPanoramaViewDelegate implements StreetViewLifecycleDelegate {\n    private final ViewGroup container;\n    private final IStreetViewPanoramaViewDelegate delegate;\n    private View view;\n\n    public StreetViewPanoramaViewDelegate(ViewGroup container, IStreetViewPanoramaViewDelegate delegate) {\n        this.container = container;\n        this.delegate = delegate;\n    }\n\n    @Override\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle savedInstanceState) {\n        throw new UnsupportedOperationException(\"onCreateView not allowed on StreetViewPanoramaViewDelegate\");\n    }\n\n    @Override\n    public void onCreate(@Nullable Bundle savedInstanceState) {\n        try {\n            Bundle temp = new Bundle();\n            MapsBundleHelper.transfer(savedInstanceState, temp);\n            delegate.onCreate(temp);\n            MapsBundleHelper.transfer(temp, savedInstanceState);\n            view = (View) ObjectWrapper.unwrap(delegate.getView());\n            container.removeAllViews();\n            container.addView(view);\n        } catch (RemoteException e) {\n            throw new RuntimeRemoteException(e);\n        }\n    }\n\n    @Override","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-maps/src/main/java/org/microg/gms/maps/StreetViewPanoramaViewDelegate.java#L16-L52","documentation":"StreetViewPanoramaViewDelegate.onCreateView(LayoutInflater, ViewGroup, Bundle) is deliberately unsupported: StreetViewPanoramaView owns its view creation through its container, so inflation via the delegate is treated as misuse and throws UnsupportedOperationException unconditionally.","triggerScenarios":"Calling streetViewPanoramaViewDelegate.onCreateView(...) directly, or a Fragment's onCreateView forwarding to the delegate instead of using StreetViewPanoramaView.","commonSituations":"Embedding Street View in custom Fragments with hand-written lifecycle plumbing, porting Google Maps SDK internal delegate usage to microG, or frameworks that invoke every delegate lifecycle method blindly.","solutions":["Create the panorama via StreetViewPanoramaView (constructed with StreetViewPanoramaOptions) and forward only its supported lifecycle callbacks.","In a Fragment, instantiate StreetViewPanoramaView in onCreateView yourself and return it.","Remove any onCreateView forwarding to the delegate.","Prefer StreetViewPanoramaFragment/SupportStreetViewPanoramaFragment when fragment embedding is acceptable."],"exampleFix":"// before\n@Override\npublic View onCreateView(LayoutInflater inf, ViewGroup p, Bundle s) {\n    return delegate.onCreateView(inf, p, s); // always throws\n}\n// after\n@Override\npublic View onCreateView(LayoutInflater inf, ViewGroup p, Bundle s) {\n    streetViewPanoramaView = new StreetViewPanoramaView(getContext(), options);\n    streetViewPanoramaView.onCreate(s);\n    return streetViewPanoramaView;\n}","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"public static boolean supportsViewCreation(LifecycleDelegate d) {\n    return !(d instanceof StreetViewPanoramaViewDelegate);\n}","tryCatchPattern":"try {\n    view = delegate.onCreateView(inflater, parent, savedInstanceState);\n} catch (UnsupportedOperationException e) {\n    view = streetViewPanoramaView; // use the owning view instead\n}","preventionTips":["Create panorama views via StreetViewPanoramaView or StreetViewPanoramaFragment, never via the delegate.","Construct StreetViewPanoramaView yourself in Fragment.onCreateView.","Do not reflectively call all delegate lifecycle methods.","Review Street View embedding code during microG migrations for delegate misuse."],"tags":["android","maps","street-view","unsupported-operation","lifecycle"],"backgroundTag":"unsupported-operation","analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}